#include "logindialog.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "registerdialog.h"
#include "resetdialog.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    _login_dlg = new LoginDialog(this);
    _login_dlg->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
    //将我们自定义的组件设置到中央控件中
    setCentralWidget(_login_dlg);
//    _login_dlg->show();

    // 创建信号与槽位去切换注册和登录界面
    //当loginDialog中的按钮被点击后，自己也去注册了switchRegister
    //从而再触发这个信号与槽位
    connect(_login_dlg,
            &LoginDialog::switchRegister,
            this,
            &MainWindow::SlotSwitchRegister);
    connect(_login_dlg,
            &LoginDialog::switchReset,
            this,
            &MainWindow::SlotSwitchRegister);

    //连接创建聊天界面信号
     connect(TcpMgr::GetInstance().get(),&TcpMgr::sig_swich_chatdlg, this, &MainWindow::SlotSwitchChat);

     emit TcpMgr::GetInstance().get()->sig_swich_chatdlg();
}

MainWindow::~MainWindow()
{
    delete ui;
    // 由于我们没有指定qt的父节点，所有不会帮我们回收资源
    // 所有需要我们自己处理【已经设置为父窗口管理】
//    if(_login_dlg){
//        delete _login_dlg;
//        _login_dlg = nullptr;
//    }
//    if(_register_dlg){
//        delete _register_dlg;
//        _register_dlg = nullptr;
//    }
}

void MainWindow::SlotSwitchRegister()
{

    _register_dlg = new RegisterDialog(this);
//    setCentralWidget(_register_dlg);
//    _register_dlg->show();


    // dialog会有弹框,且还有自己的关闭，放大等按钮，我们将设置自定义的属性
    // 在这里，设置自定义的边框提示，和
    // 这样就可以将弹出框不会独立出去

    _register_dlg->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
//    _register_dlg->hide();
    //响应返回
    connect(_register_dlg,
            &RegisterDialog::back,
            this,
            &MainWindow::SlotSwitchLogin);
    connect(_register_dlg,
            &RegisterDialog::sigSwitchLogin,
            this,
            &MainWindow::SlotSwitchLogin);

    setCentralWidget(_register_dlg);
    _login_dlg->hide();
    _register_dlg->show();
}

void MainWindow::SlotSwitchLogin()
{
    //由于切换的时候，上一个登陆会被析构回收掉，所有这里要重新创建
    qDebug() << "click";
    _login_dlg = new LoginDialog(this);
    _login_dlg->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
    //将我们自定义的组件设置到中央控件中
    setCentralWidget(_login_dlg);
    _register_dlg->hide();
    _login_dlg->show();
    //连接登陆的页面的切换注册页面事件，重新绑定一下
    connect(_login_dlg,&LoginDialog::switchRegister,
            this,&MainWindow::SlotSwitchRegister);
    connect(_login_dlg,&LoginDialog::switchReset,
            this,&MainWindow::SlotSwitchReset);
}

void MainWindow::SlotSwitchReset()
{
    qDebug() << "diaoyon";
    //创建一个CentralWidget, 并将其设置为MainWindow的中心部件
    _reset_dlg = new ResetDialog(this);
    _reset_dlg->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
    setCentralWidget(_reset_dlg);

   _login_dlg->hide();
    _reset_dlg->show();
    //注册返回登录信号和槽函数
    connect(_reset_dlg, &ResetDialog::switchLogin, this, &MainWindow::SlotSwitchLogin2);
}

void MainWindow::SlotSwitchLogin2()
{
    qDebug() << "click";
    _login_dlg = new LoginDialog(this);
    _login_dlg->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
    //将我们自定义的组件设置到中央控件中
    setCentralWidget(_login_dlg);
    _reset_dlg->hide();
    _login_dlg->show();
    //连接登陆的页面的切换注册页面事件，重新绑定一下
    connect(_login_dlg,&LoginDialog::switchRegister,
            this,&MainWindow::SlotSwitchRegister);
    connect(_login_dlg,&LoginDialog::switchReset,
            this,&MainWindow::SlotSwitchReset);
}

void MainWindow::SlotSwitchChat(){


    _chat_dlg = new ChatDialog();
    _chat_dlg->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
    setCentralWidget(_chat_dlg);
    _chat_dlg->show();
    _login_dlg->hide();
    this->setMinimumSize(QSize(1050,900));
    this->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
}
